
        <html>
			<head>
			     <title>短域名进化史 - mramydnei</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/2839">http://drops.wooyun.org/tips/2839</a></h1>
				
      <p>
        <p>一个短的域名一直都是很多人所推崇的。因为对于大部分人来说，域名越短就会越好记忆。但是，还存在一部分人，他们不在乎域名是否好记，但是他们巴不得自己的域名只有三位，两位甚至是没有长度。他们，就是XSSer。</p>

<h2>0x00 男人为什么要比短</h2>

<hr />

<p>正常的男人都喜欢比谁长，而狂热的XSSer都喜欢比谁短。因为在真实的世界里，我们往往都会遇见字符长度限制。其中的部分问题，是可以通过Short Talk Of XSS中提到的方法进行解决的。但还有一部分极端的场景，是没有办法靠那些硬技术去解决的。比如，我的好友@/fd最近出的prompt.ml这个XSS系列挑战当中就有这样的一道题：</p>

<pre><code>function escape(input) {
    // make sure the script belongs to own site
    // sample script: http://prompt.ml/js/test.js
    if (/^(?:https?:)?\/\/prompt\.ml\//i.test(decodeURIComponent(input))) {
        var script = document.createElement('script');
        script.src = input;
        return script.outerHTML;
    } else {
        return 'Invalid resource.';
    }
}
</code></pre>

<!--more-->

<p>由于挑战还没有结束，所以在这篇文章中我们会避免一些可能会透露答案的信息。但是，可以确定的是我们是没有办法从src跳出来的。也就是说，故事会围绕怎么在这个场景下调用远程JS文件这个话题进行下去。所以，那些Short Talk Of XSS当中给出的解决方案，对于这种场景来说是无能为力的。我们需要关注的是如何让自己的域名变短。</p>

<h2>0×01 短域名之初体验</h2>

<hr />

<p>一个即简单又直接的方法就是买。通常三位的域名，基本上都是XSSer人手一个。比如，我在不久前就买了x55.me.看上去很丑，但是起码算总长度的话，它还是6位的。有了一个短的域名不但能帮助你绕过一些长度限制，还可以让你在与大牛同台竞技时，不会输在非技术性的细节上。</p>

<p>既然靠钱可以解决，那我们为什么不买两位的呢？问题是两位域名价格相对较高而且很难能找到没有被注册。</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240239407.jpg" alt="enter image description here" /></p>

<p>而且作为有Hack精神的群体，我们更希望用技术来解决问题。所以让我们先回到购买3位域名的问题。有没有办法不花钱就弄到和三位域名一样效果的URL呢？答案是，有的。这里和大家分享一个生成短网址的网站：</p>

<pre><code>http://xn--hqd.ws/
</code></pre>

<p><img src="http://static.wooyun.org/20140918/2014091812240325361.jpg" alt="enter image description here" /></p>

<p>借助这个网站，就可以让我们拥有一个和xxx.xx一样长度的域名来调用远程JS了。^_^</p>

<p>得到生成的链接：</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240395741.jpg" alt="enter image description here" /></p>

<p>but，wait！那个看上去不怎么可爱的韩文字符长度真的是1么？</p>

<p>让我们打开浏览器验证一下：</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240395266.jpg" alt="enter image description here" /></p>

<p>看上去Javascript确实认为”ᄒ”的长度为1.但，如果验证长度的是Javascript还需要整这么麻烦？直接抓包改包，不就过去了么？是的，所以让我们在PHP里再做一下验证。php当中判断字符串长度的函数有两个，分别是strlen和mb_strlen。后者，与前者最大的不同就是就是可以在参数中定义字符集。我们来写一个简单的脚本：</p>

<pre><code>&lt;?php
echo 'strlen is:'.strlen($_GET["str"]).'&lt;br&gt;';
echo ' mb_strlen is:'.mb_strlen($_GET["str"]).'&lt;br&gt;';
echo 'utf-8 mb_strlen is:'.mb_strlen($_GET["str"], 'utf-8').'&lt;br&gt;';
echo 'gbk mb_strlen is:'.mb_strlen($_GET["str"], 'gbk').'&lt;br&gt;';
echo 'gb2312 mb_strlen is:'.mb_strlen($_GET["str"], 'gb2312').'&lt;br&gt;';
echo 'gb18030 mb_strlen is:'.mb_strlen($_GET["str"], 'gb18030').'&lt;br&gt;';
echo 'big5 mb_strlen is:'.mb_strlen($_GET["str"], 'big5').'&lt;br&gt;';
?&gt;
</code></pre>

<p>通过脚本来观察一下，不同函数和字符集设定的情况下”ᄒ”长度分别会是多少：</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240312707.jpg" alt="enter image description here" /></p>

<p>可以看到当我们使用更为规范的mb&#95;strlen并将字符集设定为比较常见的utf-8和gb18030时，该字符长度只有1.也就是说，在面对懂得规范输写的码农时，这种方法是成立的。我们并没有花一分钱就得到了一个和三位域名在长度上等效的URL。awesome！ PS:由于mb&#95;strlen在字符集为utf-8的情况下，长度结果和控制台是一样的，所以下面都使用控制台截图代替。</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240441487.jpg" alt="enter image description here" /></p>

<p>但是还不够短，因为后面还有路径。既然韩国人的玩意儿字符长度可以是1，那中文可以么？答案自然是可以的。我们只需要购买一个后缀为两位的中文域名（如果你看明白了，就该懂其实中文，韩文什么的一点都不重要）。而且已经有人这么去做了。比如我们的小伙伴，0x_Jin已经入坑。</p>

<p>http://靖.pw</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240493508.jpg" alt="enter image description here" /></p>

<h2>0×02 Unicode黑魔法</h2>

<hr />

<p>回顾一下，我们从收费的xxx.xx进化到了免费的x.xx/x,再进一步进化到了x.xx。我们已经将域名缩短到了传说中的4位。还能再短么？如果不能就真的没有必要写这个文章了。在这里，<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="f31a6f731b557216767b15776c1b4351b3809b92959a94869f9f9a9d15666a174f69174975157b6217485f1b4c6a174b59157973164454107371">[email&#160;protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></p>

<p>http://靖.㎺</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240422380.jpg" alt="enter image description here" /></p>

<p>看上去pw有些奇怪？没错，因为这并不是p和w，而是unicode字符㎺(U+33BA)。这个也能访问？点一下链接不就知道喽。这是个即神奇但又不陌生的现象。为什么这么说呢，因为我们经常会碰到这样的情况。当我们在忘记切换输入法，拿着中文输入法就在URL敲入:</p>

<pre><code>http://www。baidu。com
</code></pre>

<p>并按下回车时，会发现还是会正常跳入www.baidu.com，这个问题其实就已经证明了在hostname中，这种事情是有在发生的。但需要尊重的是，我们谁都没有想过可以借助这种现象来缩短我们的域名长度。所以技术一直都在于创新度而不在于难<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="35d08f93d6b5b7d0a99ddd8aacdcb2b9d0b3b8d39994dd949dd2918fd3bda4d09a8c75465d54535c524059595c5bd2afb1475046455056411bd3a0b0d18fbedd9b87">[email&#160;protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script>到这里，我们的域名已经进化到x.x也就是三位的长度了。但是，我们不可能停留在pw上面，<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="a0480e09462831441b0c463d05451c2045072b47360f472b22473a24c6d5dadac9cec745300743202244182b493d0246380f462831473a2445102f441c39441c14e0">[email&#160;protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script>/fd写的一个hostname的fuzzer：</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240460352.jpg" alt="enter image description here" /></p>

<p>然后我们得到了一些非常有趣的结果。由于内容比较多在这里只显示部分结果。首先是一些可以作为域名后缀的unicode字符：</p>

<pre><code>ǳ : dz     //valid domain ext
₨ : rs     //valid domain ext
№ : no     //valid domain ext
℠ : sm     //valid domain ext
℡ : tel    //valid domain ext
™ : tm     //valid domain ext
㎁ : na    // valid domain ext
U+3377 : dm   //valid domain ext
㎃ : ma  // valid domain ext
㎋ : nf  //valid domain ext
㎖ : ml  //valid domain ext
㎙ : fm  //valid domain ext
㎝ : cm  //valid domain ext
㎰ : ps  //valid domain ext
㎳ : ms  //valid domain ext
㎺ : pw  //valid domain ext
㎽ : mw  //valid domain ext
㏄ : cc  //valid domain ext
㏅ : cd  //valid domain ext
㏉ : gy  //valid domain ext
㏌ : in  //valid domain ext
㏗ : ph //valid domain ext
㏚ : pr  //valid domain ext
㏛ : sr  //valid domain ext
ﬁ : fi  //valid domain ext
ﬅ : st //valid domain ext
ﬆ : st //valid domain ext
</code></pre>

<p>这样一来，我们能够买的就不单是pw结尾的域名了。不过需要说一下的是，在我们现在的比价结果中，pw是最便宜的。一个汉字.pw的域名在XX互联只需要18元就能拿下了。让我们继续来看其它的一些有趣的结果。这次，让我们继续回到免费这个话题上面。</p>

<p>Ⅷ : viii ㎉ : kcal 可以看到在这次的结果中。我们列出来了两个可以用一个unicode字符代替4个字符的结果。然而.ml结尾的域名，是可以免费注册到长度大于等于4的域名的。所以，我们的小伙伴就抢占先机，拿下了:</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240410924.jpg" alt="enter image description here" /></p>

<p>Ⅷ.㎖ 和 ㎉.㎖ 4 这样，两个免费的3位域名（总长度）就到手了。但是三位还是有点长。我们能做到2位么？让我们再来看看另一部分的fuzz结果：</p>

<pre><code>⒈ : 1.   //use one unicode char instead of 2 chars and include dot
⒉ : 2.   //use one unicode char instead of 2 chars and include dot
⒊ : 3.   //use one unicode char instead of 2 chars and include dot
⒋ : 4.   //use one unicode char instead of 2 chars and include dot
⒌ : 5.   //use one unicode char instead of 2 chars and include dot
⒍ : 6.   //use one unicode char instead of 2 chars and include dot
⒎ : 7.   //use one unicode char instead of 2 chars and include dot
⒏ : 8.   //use one unicode char instead of 2 chars and include dot
⒐ : 9.   //use one unicode char instead of 2 chars and include dot
⒑ : 10.   //use one unicode char instead of 3 chars and include dot
⒒ : 11.   //use one unicode char instead of 3 chars and include dot
⒓ : 12.   //use one unicode char instead of 3 chars and include dot
⒔ : 13.   //use one unicode char instead of 3 chars and include dot
⒕ : 14.   //use one unicode char instead of 3 chars and include dot
⒖ : 15.   //use one unicode char instead of 3 chars and include dot
⒗ : 16.   //use one unicode char instead of 3 chars and include dot
⒘ : 17.   //use one unicode char instead of 3 chars and include dot
⒙ : 18.   //use one unicode char instead of 3 chars and include dot
⒚ : 19.   //use one unicode char instead of 3 chars and include dot
⒛ : 20.   //use one unicode char instead of 3 chars and include dot
㏘ : p.m. //include dot
㏂ : a.m. //include dot
㏇ : co. //valid domain ext and also include dot

这部分结果，非常的有趣。因为这些unicode字符最后会被解释为带”.”的字符。也就是说，如果我们购买了20.xx，然而这个xx又正好是可以用一个unicode字符可以代替的后缀的话，我们的长度就会变成？2位！当然，我们已经这么去做了。这是我们的战利品：

http://⒛₨
</code></pre>

<p>PS:当然这不是免费的。如果你有办法注册2位的免费域名也希望你能告诉我</p>

<p><img src="http://static.wooyun.org/20140918/2014091812240436763.jpg" alt="enter image description here" /></p>

<p>不过机智的你，可能会发现在webkit下面当你点击上面的链接时，会跳转到about:blank。也就是说这种使用带dot的unicode字符的方法在webkit下面是不适用的。那这样一来，如果使用20.₨的话，长度不就又变成3+1了么？我们还有别的辅助：</p>

<pre><code>⑩ : 10   //use one unicode char instead of 2 chars
⑪ : 11   //use one unicode char instead of 2 chars
⑫ : 12   //use one unicode char instead of 2 chars
⑬ : 13   //use one unicode char instead of 2 chars
⑭ : 14   //use one unicode char instead of 2 chars
⑮ : 15   //use one unicode char instead of 2 chars
⑯ : 16   //use one unicode char instead of 2 chars
⑰ : 17   //use one unicode char instead of 2 chars
⑱ : 18   //use one unicode char instead of 2 chars
⑲ : 19   //use one unicode char instead of 2 chars
⑳ : 20   //use one unicode char instead of 2 chars
</code></pre>

<p>原来20也是可以通过单个字符来代替的。这样一来，我们就可以通过灵活的切换游走在2位和3位之间了。</p>

<pre><code>http://⑳.₨  //兼容所有浏览器
http://⒛₨  //兼容Firefox和IE
</code></pre>

<p><img src="http://static.wooyun.org/20140918/2014091812240592561.jpg" alt="enter image description here" /></p>

<p>这真是非常激动人心的。在将域名长度缩短到了两位之后，让我们再来看看另外一部分的结果：</p>

<pre><code>℀ : a/c    // path
℁ : a/s    // path
℅ : c/o    // path
℆ : c/u    // path
</code></pre>

<p>在这部分结果当中，发现有些unicode字符最终会被解释称 字符/字符。此外，我们之前提到的会带”.”的结果作为二级域名提供给用户，也将会是一个很不错的选择。比如：</p>

<pre><code>http://⒛⒛₨  //兼容IE和FF
</code></pre>

<p><img src="http://static.wooyun.org/20140918/2014091812240536983.jpg" alt="enter image description here" /></p>

<h2>0×03 写在最后</h2>

<hr />

<p>这就是，我们在这些日子里不停的fuzzing，思考，调查所得到的结果。</p>

<pre><code>x55.me(6位)-&gt;20.rs(5位)-&gt;靖.pw(4位)-&gt;⑳.₨(3位)-&gt;⒛₨(2位)-&gt;？ 
</code></pre>

<p>我们讨论了很多。讨论了如果在这些知识基础上开放一个XSS平台会如何，是否会被山寨？我觉得山寨是肯定会有的。因为trick都已经放出来了，所以对于效仿者来说只需要照着用就可以了。但是，好的技术支持和功能模块也许真的不是ctrl+c就能带走的。所以我相信我们会做出来一个不会被复制的平台。</p>

<p>最后，让我们再次以长度的话题结尾。那么，1位是可能的么？也许对于土豪来说买个tld就是可能的。</p>

<pre><code>http://ai
</code></pre>

<p>你需要做的就是买一个可以用单个unicode字符代替的tld。</p>

<p>Thanks for your time.</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          